home *** CD-ROM | disk | FTP | other *** search
/ BBS in a Box 12 / BBS in a box XII-2.iso / Files II / Prog / M / MacWT 0.04.sit / WT Docs / README-0.03 < prev    next >
Encoding:
Text File  |  1994-05-18  |  8.6 KB  |  217 lines

  1. wt - a 3D game engine
  2.  
  3. Copyright (C) 1994 by Chris Laurel
  4.  
  5. Please see the LICENSE file for further details.  You may not distribute
  6. this project without this file (README) and the LICENSE file included.
  7.  
  8. ---------------------------------------------------------------------------
  9.  
  10. This is still a preliminary version of my 3D game engine, wt.
  11.  
  12. * In the proud tradition of cp, mv, rm, as, and cc, now there is 'wt'
  13.   wt (never capitalized) stands for "what's that?"
  14.  
  15. * This is not by any means a complete game.  It is just a demo of my
  16.   graphics engine.  I'd never name a game wt.
  17.  
  18. * wt is portable software.  See the section on porting at the end of this
  19.   README for information on what to change in order to port to another
  20.   platform.
  21.  
  22. * Features:
  23.  
  24.     * Easy to edit world file.  Just haul out your favorite text editor
  25.       and modify 'castle.world'  Or create your own .world file from
  26.       scratch.  Whee.  Just don't get carried away because the world
  27.       file format will be changing before the next release.
  28.  
  29.     * No BSP trees were killed to make this program.  Sorry . . . it's
  30.       late.  BSP trees are elegant and fast *if* your environment is
  31.       static.  I eventually want walls in wt that move and change shape.
  32.       However, if I can't kill a bug having to do with walls perpendicular
  33.       to the view plane, I may have to resort to a BSP tree for determining
  34.       wall visibility (or if my current algorithm is too slow for worlds
  35.       with a large number of walls.)
  36.  
  37.     * Variable texture map size.  Texture maps for walls can be any
  38.       width you like, but the height must be either 64 or 128.  Floor
  39.       textures must be either 64x64 or 128x128.  The main reason why
  40.       arbitrary powers of two aren't supported has to do with the fact that
  41.           Intels x86 chips don't have enough registers for my innermost loops.
  42.  
  43.     * Texture scaling for walls.  The walls have an x scale factor and
  44.       a y scale factor.  It might be more properly called 'frequency,'
  45.       since the smaller the parameter, the bigger the texture map will
  46.       appear.  Supporting the scaling factors requires a couple of extra
  47.       multiplies in the wall drawing function.
  48.  
  49.  
  50. * Running the wt and xwt demos
  51.     
  52.     * For xwt, just type 'xwt castle.world'  The keys are:
  53.         forward - up arrow
  54.         backward - down arrow
  55.         turn left - left arrow
  56.         turn right - right arrow
  57.         strafe - slash
  58.         run - shift
  59.         jump - space
  60.         quit - q
  61.  
  62.             Alt or Meta should also be useable as strafe keys, but my
  63.             version of X distributions as the Alt key mapped to something
  64.         else.  
  65.      
  66.     * To run wt, you need to be root (or make it setuid root first.)
  67.         As root, type 'wt castle.world'  The keys are the same as for the
  68.         X version, except that the slash does not work for strafing.
  69.  
  70.  
  71. * Resources
  72.  
  73.     * A wt mailing list has been started recently.  Topics will include
  74.         improving the engine design and adding features, porting the
  75.         engine to different architectures, and game design using the wt
  76.         graphics engine.  The addresses are:
  77.  
  78.         to subscribe:  wtm-request@magoo.uwsuper.edu
  79.             to post a message: wtm@magoo.uwsuper.edu
  80.  
  81.     * The wt ftp site is magoo.uwsuper.edu.  wt related files will be
  82.         located in the /pub/games directort.
  83.     
  84.  
  85. * Responses
  86.  
  87.     * While wt does look similar in many respects to DOOM, it is not
  88.       based on any DOOM source code, and I have no connection with Id
  89.       software other than being a customer.
  90.  
  91.     * I will add mouse support for the X11 and svgalib versions.  I also
  92.       want to support the Linux keyboard better by setting it to
  93.       RAW mode.
  94.  
  95.     * Your X server needs to support the MIT shared memory extension
  96.       in order for wt to run.  Also, it only currently supports an
  97.       8-bit pseudo color visual.  I just haven't had a chance to perfect
  98.       the X code.
  99.  
  100.     * I will eventually design a world editor.  It will run under X and
  101.       be based on Tcl/Tk.
  102.  
  103.     * Pitch and roll will not be supported.  It's a fundamental constraint
  104.       of the engine design.
  105.  
  106.     * Weird things will happen when you jump above the tops of buildings
  107.       or though the ceiling.  You cannot see the tops of buildings--this
  108.       is another design limitation.
  109.  
  110.     * Resizing the view window . . . this does need to be supported.  The
  111.       reason why it is not currently supported again has to do with the
  112.       limited register set of the x86 chips.  I wanted to keep all my
  113.           variables in registers in the innermost loop, but they would not
  114.       all fit.  So, I made the view width an immediate constant . . . if
  115.       I can coax gcc to let me use the ebp register, I'll use that to
  116.       hold the width.  Or I could just deal with the (probably minor)
  117.       speed degradation I'd get by reading it from memory.
  118.  
  119.  
  120. * Room for improvement
  121.  
  122.     * Optimizations.  There are some obvious ones that I have not gotten
  123.       around to implementing yet.  I think that the floors code
  124.       can be sped up significantly.  If you know of any improvements to the
  125.       assembly loops in slice.c, *tell me*.  I'm not an Intel assembly
  126.       language guru or anything.
  127.  
  128.     * Code cleanup.  The core of wt is still in development, so some of
  129.       the code surrounding the renderer is hacky test-the-engine stuff.
  130.       Once wt starts developing into a real game, much of the code
  131.       will be reorganized.  wt.c will change completely.
  132.  
  133.  
  134. * 'Port away!'
  135.  
  136.     * wt now supports both big and little endian machines.  There should
  137.       not be anything remaining in wt which is endianness dependent.
  138.  
  139.     * There are three types of #define's used to block off non-portable
  140.       sections of the code.  ARCH_i86 surrounds the couple assembly
  141.       routines in the wt source.  I also surround these with an
  142.       #ifdef __GNUC__ because the inline assembly code syntax in
  143.       gcc is different than for other x86 compilers I've seen.  (Anyone
  144.           considering doing an DOS or Windows port take note:  the GNU
  145.       assembler uses AT&T syntax, which has the reverse operand order
  146.       of Intel syntax.)  Finally, there is a #define to identify
  147.       the graphics system.
  148.  
  149.     * Substitute C routines exist for assembly language functions.
  150.       On a RISC system with a good compiler, I figure you shouldn't need
  151.       to recode them in assembly language.  The C functions *should* work.
  152.       I have not tested them in a while, but they were used extensively
  153.       before I rewrote them in assembly.
  154.  
  155.     * Before attempting to compile on a non-UNIX system, #define PROFILE
  156.       to be zero in render.c.
  157.  
  158.     * If you've got a non-Intel system with X11 (or an Intel system
  159.           with X11 which does not have gcc), then you should be able to
  160.       compile wt successfully by just not defining ARCH_i86 in the
  161.       Makefile.
  162.  
  163.     * If you're not running X11, then you'll need to write your own
  164.       graphics and input routines and add a #define for your graphics
  165.       system.  Check out linuxvga.c and x11graphics.c for sample
  166.       graphics implementations.  All you need is an initialization
  167.       function, a cleanup function, and something to blast a framebuffer
  168.       the screen--memcpy, CopyBits or whatever . . .
  169.  
  170.     * The input system hooks are declared in input.h.  To create your
  171.       own input module, create a file with these functions in it. 
  172.           For sample input routines, look in linux-console.c and x11input.c.
  173.       Mac and Windows people:
  174.       x11input.c should give you a good idea about how to tie an
  175.       event handler into wt.
  176.  
  177.     * Send me your ports and I'll include them in the next wt distribution!
  178.       This goes for other improvements to wt, too.
  179.  
  180.     * I'm especially interested in reports about how fast wt will run
  181.       on different platforms (wtStones?)  If you do a port, talk to me
  182.       about speed, especially if you have a PowerMac or Alpha system.
  183.       If you port it to a 286, I'm interested but I might laugh.
  184.  
  185.     
  186. * Future directions:
  187.  
  188.     * I'd like to see wt become a multi-platform client for an
  189.       Internet wide MUD type game.  Or a perhaps a net-wide arcade
  190.       game like Xpilot.  I've got a lot of other more innovative ideas
  191.       but I'd better get the engine done before I start spouting about
  192.       them.
  193.  
  194. * Credits
  195.  
  196.     Dan Egnor (egnor@ugcs.caltech.edu) - submitted the first set of
  197.          endian fixes.
  198.     Dave Thomas (dave@thomases.demon.co.uk) - wrote up an Imakefile
  199.     Pietik{inen (pp@lyseo.otol.fi) - RAW mode keyboard patches for
  200.          the svgalib version.
  201.         Harm Hanemaayer (hhanemaa@cs.ruu.nl) - Patches to linuxvga.c to
  202.          make better use of svgalib.
  203.     Russ Nelson (nelson@crynwr.com) - Created the as yet unincorporated
  204.          Tcl worldfile changes and provided lots of good advice.
  205.     Patrick L. McGillan (pmcgilla@magoo.uwsuper.edu) - Set up the wt
  206.          mailing list and ftp site.
  207.  
  208. * Me:
  209.  
  210.     send any comments, ideas, bug reports, etc. to:
  211.  
  212.     Chris Laurel
  213.     home: claurel@mr.net
  214.     work: chrisl@county.lmt.mn.org
  215.     snailmail: 5700 W Lake St, #208
  216.                    St. Louis Park, MN  55416
  217.